/**
 * wujie 微前端通信相关的 hooks
 */

interface NavigateOptions {
  path: string;
}

interface WujieProps {
  [key: string]: any;
}

export function useWujie() {
  /**
   * 判断当前是否在 wujie 环境中运行
   */
  const isInWujie = (): boolean => {
    return Boolean(window.__POWERED_BY_WUJIE__);
  };

  /**
   * 获取主应用传递的 props 数据
   */
  const getProps = (): WujieProps | undefined => {
    return window.$wujie?.props;
  };

  /**
   * 向主应用发送导航事件
   * @param options - 导航参数
   */
  const emitNavigate = (options: NavigateOptions): void => {
    if (window.$wujie?.bus) {
      window.$wujie.bus.$emit('child-app:navigate', options);
    }
  };

  /**
   * 监听主应用发送的事件
   * @param eventName - 事件名称
   * @param callback - 回调函数
   */
  const onMessage = (eventName: string, callback: Function): void => {
    if (window.$wujie?.bus) {
      window.$wujie.bus.$on(eventName, callback);
    }
  };

  /**
   * 移除事件监听
   * @param eventName - 事件名称
   * @param callback - 回调函数
   */
  const offMessage = (eventName: string, callback?: Function): void => {
    if (window.$wujie?.bus) {
      window.$wujie.bus.$off(eventName, callback);
    }
  };

  /**
   * 发送通用消息给主应用
   * @param eventName - 事件名称
   * @param data - 事件数据
   */
  const emitToMain = (eventName: string, data?: any): void => {
    if (window.$wujie?.bus) {
      window.$wujie.bus.$emit(eventName, data);
    }
  };

  /**
   * 获取当前子应用在主应用中的路由信息
   */
  const getLocation = (): Location | undefined => {
    return window.$wujie?.location;
  };

  return {
    isInWujie,
    getProps,
    emitNavigate,
    onMessage,
    offMessage,
    emitToMain,
    getLocation,
  };
} 